www.gusucode.com > 动网论坛Dvbbs v8.3 > 动网论坛Dvbbs v8.3\code\源程序\dv_edit\main.js
/* Dvbbs.HtmlEdit Author: HxyMan Thanks: Laomi,Fssunwin,Liancao Update: 2008-1-10 */ function DvEdit(){ this_=this; this.$=function(o,d){return (d||document).getElementById(o)}; this.$f=function(f){return this.$(f)?((this.$(f)).contentWindow||window.frames[f]):null}; this.$t=function(t,d){return (d||document).getElementsByTagName(t)}; this.ae=function(o,t,h){if (o.addEventListener){o.addEventListener(t,h,false);}else if(o.attachEvent){o.attachEvent('on'+t,h);}else{try{o['on'+t]=h;}catch(e){;}}}; this.de=function(o,t,h){if (o.removeEventListener){o.removeEventListener(t,h,false);}else if(o.detachEvent){o.detachEvent('on'+t,h);}else{try{o['on'+t]=null;}catch(e){;}}}; this.setC=function(n, v){var c=n+"="+encodeURIComponent(v);document.cookie=c;}; this.readC=function(n){var re=eval("/(?:;)?"+n+"=([^;]*);?/g");return re.test(document.cookie)?decodeURIComponent(RegExp.$1):null;}; this.getPath=function(){var a=this.$t('script');for (var i=a.length-1;i>=0;--i){if (-1!=a[i].src.toLowerCase().indexOf('dv_edit/main.js'))return a[i].src.replace('main.js','');}}; var a=navigator.userAgent; this.isIE=a.search('MSIE')>0; this.isIE8=a.search('MSIE 8.0')>0; this.isFF=a.indexOf('Gecko')!=-1&&!(a.indexOf('KHTML')>-1||a.indexOf('Konqueror')>-1||a.indexOf('AppleWebKit')>-1); this.isFF=this.isFF; this.loadJs=function(p){ var a=this.$t('script'); if(a){for (var i=a.length-1;i>=0;--i){ if (-1!=a[i].src.indexOf(p)) return; } }; var o=document.createElement('script'); o.language='javascript'; o.src=p; if (this.isFF||this.isIE8){ a=this.$t('head')[0]; if(a){a.appendChild(o);} }else{ o.onload=o.onreadystatechange=function(){if(o.readyState&&o.readyState=="loading")return;a=this_.$t('head')[0];if(a){a.appendChild(o);}} } }; this.insert=function(s){if('design'==this.m){this.t.insert(s)}else{this.$(this.c).value+=s;}}; this.clear=function(){this.$(this.c).value=' ';if('design'==this.m){this.syc('t->d');}}; this.loadCss=function(p,re){var a=this.$t('link'),o=null;if (a){for (var i=a.length-1;i>=0;--i){if (-1!=a[i].href.indexOf('dv_edit')){if (re){o=a[i];}else{return;}}}};if (!o){o=document.createElement('link');o.rel='stylesheet';o.type='text/css';};o.href=p;try{this.$t('head')[0].appendChild(o);}catch(e){;}}; this.fcs=function(o){try{setTimeout(function(){o.focus();},0);}catch(e){;}}; a=arguments[0];if(!a){return;} this.c=a['textarea_id']||'content';//textarea的id this.h=a['edit_height']||'300px';//编辑框的高度 this.m=(this.isIE||this.isFF)?(a['edit_mode']||'design'):'text';//编辑模式 this.l=a['toolbar']||['bold','italic','underline','fontsize','fontfamily','fontcolor','fontbgcolor','separator','emot','link','image','media','separator','justifyleft','justifycenter','justifyright','separator','insertorderedlist','insertunorderedlist','outdent','indent','separator','tenpay']; this.u=(this.isIE||this.isFF)?(null==a['is_show_status']?true:a['is_show_status']):false;//是否显示状态栏 this.v=null==a['is_open_temp_save']?false:a['is_open_temp_save'];//是否开启cookies保存内容 this.em=a['emot'];//表情系列 this.e=null==a['quick_send']?1:a['quick_send'];//0-不捕获快捷键发贴 1-ctrl+enter发贴 2-enter发贴 this.s=a['style_folder']||'default';//风格 this.um=null==a['use_ubb']?0:a['use_ubb'];//限制只能使用ubb this.tox=null==a['to_xhml']?1:a['to_xhml'];//是否强制转换到xhtml格式 this.lm=null;//上一次的编辑模式 this.p=this.getPath(); a=window;a.dv___=a.dv___||new Array();a.dv___.push(this); this.i=a.dv___.length-1; var b='dvedit_'+this.i+'_'; this.x={t:b+'_toolbar',w:b+'_miniwnd',f:b+'_htmlarea',c:b+'_canvas',d:b+'_div',s:b+'_status',g:b+'_design'}; this.d='window.dv___['+this.i+']'; this.f=null; this.t=null; this.bld=0; this.loadToolBar=function(){if('function'==typeof DvEditToolBar){this.bld=1;this.upDes();}else{setTimeout(this.d+'.loadToolBar()',0);}}; this.setEditable=function(){ if (!this.$(this.x.f)){return setTimeout(this.d+'.setEditable()',0);} var d=null,db=null,s=''; try{ this.f=this.$f(this.x.f); d=this.isIE?this.f.document.body:this.f.document; this.$(this.x.g).style.display=''; s=d.designMode; }catch(e){return setTimeout(this.d+'.setEditable()',0);} if(!(s&&'on'==s.toLowerCase()&&d.contentEditable)){try{d.designMode='on';d.contentEditable=true;}catch(e){};return setTimeout(this.d+'.setEditable()',0);} try { var sl = [{a:"body",b:"{background-color:#fff;font-size:14px;font-family:verdana;margin:5px;}"}, {a:"p",b:"{font-family:Verdana, Arial, Helvetica, sans-serif; font-size:14px; margin:0px;padding:0px;}"}, {a:"div.quote",b:"{margin :5px; border : 1px solid #cccccc; padding : 5px;background : #f9f9f9; line-height : normal;}"}, {a:"div.htmlcode",b:"{margin : 5px 20px; border : 1px solid #cccccc;padding : 5px;background : #fdfddf;font-size : 14px;font-family : tahoma, 宋体, fantasy;font-style : oblique;line-height : normal;}"}]; d=this.f.document; if (d.createStyleSheet) { var css = d.createStyleSheet(); for (var i=0;i<sl.length;++i) css.addRule(sl[i].a, sl[i].b); } else { var css = d.createElement("style"); s=''; for (var i=0;i<sl.length;++i) s+=sl[i].a+sl[i].b; css.appendChild(d.createTextNode(s)); d.getElementsByTagName("head")[0].appendChild(css); } } catch (e){} try{d.execCommand('useCSS',false,false);}catch(e){} this.setEditStyle(); }; this.xhtml=function(s){ if(!this.tox){return s;} s=s.replace(/<\/?\w+[^>]*/gi,function(w){w=w.replace(/ (\w+=)(?=[^\"])(\'?)([^\2> ]+)\2/gi,' $1"$3"');return w;});//<font color=red or <font color='red' -> <font color="red" s=s.replace(/<\/?\w+[^>]*/gi,function(w){w=w.replace(/<\/?\w+/gi,function(t){return t.toLowerCase();});w=w.replace(/ \w+=/gi,function(t){return t.toLowerCase();});return w;});//<FONT Color -> <font color s=s.replace(/<(br|input|meta|link|img|hr)([^>]*?)\/?>/gi,'<$1$2/>');//<img ...> -> <img .../> s=s.replace(/<\w+[^>]*>/gi,function(w){w=w.replace(/ (\w+)(?=[ \/>]){1}/gi,' $1="$1" ');return w;});//<input checked -> <input checked="checked" return s; }; this.tripOnScript=function(w){ w=w.replace(/\\"/gi,'-:special:1:-').replace(/\\'/gi,'-:special:2:-'); w=w.replace(/on\w+\s*=\s*(['"])[^\1]+?\1/gi, ''); w=w.replace(/-:special:1:-/gi,'\\"').replace(/-:special:2:-/gi,'\\\''); return w; }; this.get=function(){ var a='';try{if('design'==this.m){a=this.f.document.body.innerHTML;}else{a=this.$(this.c).value;}}catch(e){} a=a.replace(/http:\/\/.+?dv_edit\//gi,''); if(this.um){a=a.replace(/<\p>/gi,'[BR]');a=a.replace(/<[^>]*?>/gi,'');} a=this.tripOnScript(a); return this.xhtml(a); }; this.save=function(){ var a=this.get();a=a.replace(/<img.src=[^>]*(em[0-9]{1,})\.[^>]*>/gi, '[$1]'); this.setC(this.f+'_conent_saved','1');return a; }; this.syc=function(m){ var d=null; if (!this.f||!(d=this.f.document.body)){return;} var t=this.$(this.c); if ('d->t'==m){ t.value=this.xhtml(d.innerHTML); }else{ d.innerHTML=this.xhtml(t.value.length>0?t.value:(this.isFF?' ':'')); } }; this.setEditStyle=function(){ try{ var b=this.f.document.body; b.style.font='normal 14px Verdana'; b.style.padding='0px'; this.syc('t->d'); setTimeout(this.d+'.t=new DvEditToolBar('+this.d+');',0); }catch(e){setTimeout(this.d+'.setEditStyle()',0);} }; this.des='<div id="'+this.x.t+'" class="dvedittoolbar" style="display:none;" onmousedown="'+this.d+'.fcs('+this.d+'.$f(\''+this.x.f+'\'));"></div><div class="dveditwnd" style="'+(this.isFF?'position:fixed;':'_position:absolute;')+'display:none;" id="'+this.x.w+'">loading...</div><div id="'+this.x.d+'" /*onmouseover="'+this.d+'.fcs('+this.d+'.$f(\''+this.x.f+'\'));"*/ style="99%;padding:0px;margin:0px;"><iframe id="'+this.x.f+'" src="" class="dvedithtmlarea" frameborder="0" marginheight="0" marginwidth="0" style="width:100%;height:'+this.h+';overflow:visible;margin-bottom:0;margin-right:0;"></iframe></div>'; this.mode=function(m){ if (this.lm==m){return;} this.m=m; var a=this.$(this.c); if('design'==m){ a.style.display='none'; if (!this.bld){this.loadJs(this.p+'toolbar.js');this.loadToolBar();} else{if('text'==this.lm){this.syc('t->d');};this.$(this.x.g).style.display='';} }else{ a.style.font='normal 14px Verdana'; if('design'==this.lm){this.syc('d->t');} a.style.display=''; this.$(this.x.g).style.display='none'; };this.lm=m; }; this.upDes=function(){ if (this.x.g==null){this.x.g='dvedit_0__design';} var a=this.$(this.x.g);a.innerHTML=this.des; setTimeout(this.d+'.setEditable();',0); } this.cleancode=function(){ var s=this.get(); s=s.replace(/<\/p>/gi, '<br/>'); s=s.replace(/<[^>]*>/gi, function(w){ return ('<br/>'==w||-1!=w.indexOf('<img')?w:''); }); this.$(this.c).value=s; this.syc('t->d'); } this.sta='<div id="'+this.x.s+'" class="dveditstatusbar"><a href="javascript:;" onclick="'+this.d+'.mode(\'design\')" title="在此模式下编辑可以实现一些加粗、更改字体、更改文字颜色等效果。">[设计模式]</a> <a href="javascript:;" onclick="'+this.d+'.mode(\'text\')" title="纯文本模式,如果开启了HTML可以直接使用HTML代码。">[代码模式]</a></div>'; this.init=function(){ this.p=this.getPath(); this.loadCss(this.p+'skins/'+this.s+'/main.css',false); if(this.v){this.chkC();} document.writeln('<div id="'+this.x.g+'" style="text-align:left;text-indent:0;"></div>'); if (this.u){document.writeln(this.sta);} this.mode(this.m); }; this.saveT=function(){ var a=this_.get();var b=this_.readC(this_.x.f+'_conent_temp');if (!b||(a&&a.length>b.length)){this_.setC(this_.x.f+'_conent_temp',a)}; setTimeout(function(){this_.saveT()},0); //保存内容到cookies }; this.chkC=function(){ var a=this.readC(this.x.f+'_conent_temp'); if ('0'==this.readC(this.x.f+'_conent_saved')&&a&&a.replace(/<.[^.]*>/gi,'').length>10&&confirm("检测到有未保存的内容,是否立即恢复?")){ setTimeout(function(){this_.$(this_.c).value=a;},0); } this.setC(this.x.f+'_conent_temp',''); this.setC(this.x.f+'_conent_saved','0'); this.saveT(); }; this.init(); };